<?php
App::uses('AppController', 'Controller');

class ImportsControllerTest extends ControllerTestCase {
	
	public $fixtures = array('app.bizonylat', 'app.naplo', 'app.valuta', 'app.naplotipus',
									 'app.valutatetel', 'app.tetel', 'app.osztaly', 'app.gyujto_osztaly',
									 'app.gyujto', 'app.szamla', 'app.gyujto_tetel', 'app.setting',
									 'app.riportsor', 'app.terv', 'core.session');
	
	public function setUp() {
		parent::setUp();
		$this->Imports = $this->generate('Imports',
														 array(
															'components' => array('Session',
																				  //'DebugKit.Toolbar'
																				  ),
															'methods' => array('isUploadedFile')
															)
														 );
		
		$this->controller->Session->expects($this->any())
			->method('read')
			->with($this->logicalOr('Settings.cegId', 'Settings.ev', 'Auth.User.id', 'Settings'))
			->will($this->returnCallback(
									function($param){
										if($param == 'Settings.cegId')
											return 2;
										elseif($param == 'Settings.ev')
											return 2012;
										elseif($param == 'Auth.User.id')
											return 1;
										elseif($param == 'Settings')
											return array('ev' => 2012, 'cegId' => 2);
										else
											return null;
									}
									));

		$this->controller->expects($this->any())
			->method('isUploadedFile')
			->will($this->returnValue(true));
	}

	public function testImportsIndexCsv(){
		$postData = array('data' => array('Import' => array(
					'File' => array(
							'name' => 'atiras_t.csv',
							'type' => 'text/csv',
							'tmp_name' => '/home/rrd/adatok2012/fejlesztes/laksmi/import/atiras_t.csv',
							'error' => '0',
							'size' => '503'),
					'datum' => '2012-12-20')));
		/*$result = $this->testAction('/imports/index', array(
																		'return' => 'vars',
																		'data' => $postData,
																		'method' => 'post'));
		debug($result);*/
	}

	public function testImportsIndexXlsx(){
		$postData = array('data' => array('Import' => array(
					'File' => array(
							'name' => 'terv_2013_egyszerusitett.xlsx',
							'type' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
							'tmp_name' => '/home/rrd/adatok2012/fejlesztes/laksmi/import/terv_2013_egyszerusitett.xlsx',
							'error' => '0',
							'size' => '211299'),
					'datum' => '2012-12-20')));
		/*$result = $this->testAction('/imports/index', array(
																		'return' => 'vars',
																		'data' => $postData,
																		'method' => 'post'));
		debug($result);*/
	}

	public function testImportsGetImportType(){
		$this->Imports = $this->generate('Imports');
		$csvData = 'osztálykód;bevétel;költség;szöveg;szöveg;szöveg;szöveg;összeg' . "\n" . 
						'21;9681;511;Dubai bhakták;mazsola;40;dkg;600' . "\n" . 
						'21;9681;511;Dubai bhakták;pisztácia;40;dkg;1 200';
		$actual = $this->Imports->getCsvImportType($csvData);
		$expected = 'targyiAdomany';
		$this->assertEquals($expected, $actual);
		
		$csvData = 'honnan;;szla szám;Szöveg;Egyébgy;;;hova;;szla szám;Szöveg;;összeg' . "\n" . 
						'26;Gurukula;54;Krsna-mayi dd - tb, bér;;;;11;Farm;54;Krsna-mayi dd - tb, bér;;14 925' . "\n" . 
						'26;Gurukula;5299;4 színes oldal;;;;12;Controlling;911122;4 színes oldal;;1 000' . "\n" . 
						'63;Kisüzem;5299;5 színes oldal;;;;12;Controlling;911122;5 színes oldal;;1 250';
		$actual = $this->Imports->getCsvImportType($csvData);
		$expected = 'atiras';
		$this->assertEquals($expected, $actual);
	}

	public function testImportsTargyiAdomanyImport(){
		//private methodus tesztelése
		$myClass = $this->Imports;
		$class = new ReflectionClass($myClass);
		$method = $class->getMethod('targyiAdomanyImport');
		$method->setAccessible(true);

		$datum = '2012-11-30';		//date('Y-m-d'); 

		//nincs ilyen osztálykód
		$csvData = 'osztálykód;bevétel;költség;szöveg;szöveg;szöveg;szöveg;összeg' . "\n" . 
						'12;969;511;Dubai bhakták;mazsola;40;dkg;600' . "\n" . 
						'102;969;511;Dubai bhakták;pisztácia;40;dkg;1 200' . "\n" . 
						'12;969;522;ingyenes bérlet;;;;12 800';
		$actual = $method->invoke($myClass, $csvData, $datum);
		$expected = false;
		$this->assertEquals($expected, $actual);

		//nincs ilyen bevételi számla
		$csvData = 'osztálykód;bevétel;költség;szöveg;szöveg;szöveg;szöveg;összeg' . "\n" . 
						'12;969;511;Dubai bhakták;mazsola;40;dkg;600' . "\n" . 
						'12;333;511;Dubai bhakták;pisztácia;40;dkg;1 200' . "\n" . 
						'12;969;522;ingyenes bérlet;;;;12 800';
		$actual = $method->invoke($myClass, $csvData, $datum);
		$expected = false;
		$this->assertEquals($expected, $actual);

		//nincs ilyen ktg számla
		$csvData = 'osztálykód;bevétel;költség;szöveg;szöveg;szöveg;szöveg;összeg' . "\n" . 
						'12;969;511;Dubai bhakták;mazsola;40;dkg;600' . "\n" . 
						'12;969;333;Dubai bhakták;pisztácia;40;dkg;1 200' . "\n" . 
						'12;969;522;ingyenes bérlet;;;;12 800';
		$actual = $method->invoke($myClass, $csvData, $datum);
		$expected = false;
		$this->assertEquals($expected, $actual);

		//nincs megadva szöveg
		$csvData = 'osztálykód;bevétel;költség;szöveg;szöveg;szöveg;szöveg;összeg' . "\n" . 
						'12;;511;Dubai bhakták;mazsola;40;dkg;600' . "\n" . 
						'1212;333;511;;pisztácia;40;dkg;1 200' . "\n" . 
						'12;969;522;;;;;12 800';
		$actual = $method->invoke($myClass, $csvData, $datum);
		$expected = false;
		$this->assertEquals($expected, $actual);

		//rendben lévő csv
		$csvData = 'osztálykód;bevétel;költség;szöveg;szöveg;szöveg;szöveg;összeg' . "\n" . 
						'12;969;511;Dubai bhakták;mazsola;40;dkg;600' . "\n" . 
						'12;969;511;Német farmról;pisztácia;35;dkg;1 200' . "\n" . 
						'11;969;522;ingyenes bérlet;;;;12 800';
		$actual = $method->invoke($myClass, $csvData, $datum);
		$expected = true;
		$this->assertEquals($expected, $actual);
	}
	
	public function testImportsCsvTrim(){
		//private methodus tesztelése
		$myClass = $this->Imports;
		$class = new ReflectionClass($myClass);
		$method = $class->getMethod('csvTrim');
		$method->setAccessible(true);
		
		/*$expected = array('﻿26', 'Tb, bér');
		$actual = $method->invoke($myClass, $expected);
		$this->assertEquals($expected, $actual);*/
	}

}
?>